Programmers develop software of various kinds, including applications that execute on client devices used by users. For example, users may run applications on smartphones, laptop computers, tablet computers, set-top boxes, personal computers, and/or any other computing devices capable of running an application. Each of these types of platforms can have a different operating system, and each operating system may have different versions. When programmers write code, they typically need to account for differences in the user interfaces of the different platform types.
Software engineering can make use of various concepts when dealing with ideas associated with computer software. For example, abstraction is a concept that can simplify how programmers deal with code, e.g., the use of function, subroutine, method, procedure or other types of calls from a program. As an example, a programmer may include a call to an UpdateCustomerAddress function at the abstracted level. However, behind the abstraction can be the implementation details, often specific to a particular platform, database, or other constraint, such as operations for locating the customer record in the data base, replacing the existing address with the new one, rewriting the record, and updating the LastChangedBy field.